package ar.edu.untref.robotica.log;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import ar.edu.untref.robotica.simulador.Configuracion;
import ar.edu.untref.robotica.simulador.Posicion;

import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;

public class Log {

	private File file;

	public void crearFile() throws IOException {

		Date dateNow = new Date();
		String nombre = new SimpleDateFormat("yyyyMMddHHmmss").format(dateNow);
		String path = Configuracion.instancia().getRutaDelLog();
		String extension = ".txt";
		new File(path).mkdirs();
		this.file = new File(path + "/" + nombre + extension);
		this.file.createNewFile();
		CSVWriter writer = new CSVWriter(new FileWriter(file), ';');
		String[] encabezado = "Ángulo#Posición X#Posición Y#Velocidad Derecha#Velocidad Izquierda#Sensor F#Sensor I#Sensor D#Sensor T"
				.split("#");
		writer.writeNext(encabezado);
		writer.close();
	}

	/**
	 * datos[0] = datoAngulo datos[1] = datoVelocidadDerecha datos[2] =
	 * VelocidadIzquierda datos[3] = Sensor F datos[4] = Sensor I datos[5] =
	 * Sensor D datos[6] = Sensor T datos[7] = Posicion Y datos[8] = Posicion X
	 * 
	 * @param datos
	 * @throws IOException
	 */
	public void guardarDatos(List<String[]> listaDeDatos) throws IOException {

		CSVWriter writer = new CSVWriter(new FileWriter(file, true), ';');
		for (String[] datos : listaDeDatos) {			
			writer.writeNext(datos);
		}
		writer.close();
	}

	public static List<Posicion> parsearFile(String nombre) {

		List<Posicion> posicionesResultado = new ArrayList<Posicion>();

		try {
			CSVReader reader = new CSVReader(new FileReader(nombre), ';');

			String[] linea;

			reader.readNext(); // Saltear encabezado.

			while ((linea = reader.readNext()) != null) {

				Double angulo = Double.parseDouble(linea[0]);
				Double posicionX = Double.parseDouble(linea[1]);
				Double posicionY = Double.parseDouble(linea[2]);

				Posicion posicion = new Posicion(posicionX, posicionY, angulo);

				posicionesResultado.add(posicion);
			}

			reader.close();
		} catch (NumberFormatException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return posicionesResultado;
	}

}